//package edu.school.interceptor;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.serializer.SerializerFeature;
//import edu.school.model.Log;
//import edu.school.model.Manager;
//import edu.school.service.LogServiceImpl;
//import edu.school.util.Time;
//import lombok.extern.slf4j.Slf4j;
//import org.aopalliance.intercept.Joinpoint;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.web.servlet.HandlerInterceptor;
//import org.springframework.web.servlet.ModelAndView;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import javax.servlet.http.HttpSession;
//
//@Slf4j
//public class LogInterceptor implements HandlerInterceptor {
//
//    //    @Resource
//    private LogServiceImpl logService;
//
//    //    创建有参构造方法
//    public LogInterceptor(LogServiceImpl redisUtils) {
//        this.logService = redisUtils;
//    }
//
//    //    创建日志实例对象
//    private Log log1 = new Log();
//    //    日志实例
//    private static final Logger log = LoggerFactory.getLogger(LogInterceptor.class);
//    //    访问开始时间
//    private static final String KEY_REQEST_START_TIME = "KEY_REQEST_START_TIME";
//    //   访问开始时间
//    private static final String KEY_ACCESS_LOG = "KEY_ACCESS_LOG";
//
//    /*
//    靠椅考虑作权限，日志，事物等等
//    该方法在目标方法调用之后被调用
//    若返回ture,则继续调用后续的拦截器和目标方法
//    若返回false,则不会调用后续的拦截器和目标方法
//     */
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//
//        //请求方式
//        log1.setMethod(request.getMethod());
//        //请求的接口
//        log1.setUri(request.getRequestURI());
//        log1.setTime(Time.getTime());
//        //将信息绑定在request中
//        request.setAttribute(KEY_REQEST_START_TIME, System.currentTimeMillis());
//        request.setAttribute(KEY_ACCESS_LOG, log1);
//        return true;
//    }
//
//    /*
//    该方法在目标方法调用之后，渲染视图之前被调用；
//    可以对请求域中的属性或者视图做出修改
//     */
//    @Override
//    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//        long startTime = (long) request.getAttribute(KEY_REQEST_START_TIME);
//        HttpSession session = request.getSession();
//        Manager manager = (Manager) session.getAttribute("manager");
//        Joinpoint joinpoint;
//        //获取请求参数信息
//        String paramData = JSON.toJSONString(request.getParameterMap(),
//                SerializerFeature.DisableCircularReferenceDetect,
//                SerializerFeature.WriteMapNullValue);
//        if (log1 != null) {
//            //请求的数据
//            log1.setRequestmsg(paramData);
//            if (manager != null) {
//                log1.setUsername(manager.getUsername());
//            }
//            request.setAttribute(KEY_ACCESS_LOG, log1);
//        }
//    }
//
//    /*
//    在渲染视图之后被调用；
//    可以用来释放资源
//     */
//
//    @Override
//    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//        log1.setPostmsg("返回的数据");
//        if (log1 != null) {
//            System.out.println(logService.add(log1));
//            log.info("username： " + log1.getUsername());
//            log.info("method：   " + log1.getMethod());
//            log.info("接口： " + log1.getUri());
//            log.info("requestmsg： " + JSON.parseObject(log1.getRequestmsg()));
//            log.info("postmsg： " + log1.getPostmsg());
//            log.info("log1中的数据：" + log1.toString());
//
//        }
//    }
//}
